﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Data.SqlClient;
using System.Data;
using System.Data.SqlTypes;

namespace BanHangCshap.Class.gkhtdl63.DAL
{
    public class clsBaseDAL
    {
        /// <summary>
        /// Hàm thực thi câu select không biến
        /// </summary>
        /// <param name="SPName">Tên Proc select</param>
        /// <returns>Một cái gọi là đa ta thế bồ (DataTable) được thẩy zề</returns>
        public DataTable Select(string xlSPName)
        {
            DataTable xlDataTable = new DataTable();
            try
            {
                SqlCommand xlCMD = new SqlCommand();
                xlCMD.Connection = DatabaseStatic.conn;
                xlCMD.CommandType = CommandType.StoredProcedure;
                xlCMD.CommandTimeout = 30000;
                xlCMD.CommandText = xlSPName;
                SqlDataAdapter xlYourDataAdapter = new SqlDataAdapter(xlCMD);
                xlYourDataAdapter.Fill(xlDataTable);
            }
            catch (Exception)
            {
                xlDataTable = null;
            }
            return xlDataTable;
        }

        /// <summary>
        /// Hàm thực thi câu select có biến
        /// </summary>
        /// <param name="SPName">Tên Proc có biến</param>
        /// <param name="ListPara">Danh sách tên biến dưới sql nha pa</param>
        /// <param name="ListValu">Danh sách giá trị biến</param>
        /// <returns>Một cái gọi là đa ta thế bồ (DataTable) được thẩy zề</returns>
        public DataTable Select(string xlSPName, string[] xlListPara, object[] xlListValu)
        {
            DataTable xlDataTable = new DataTable();
            try
            {
                SqlCommand xlCMD = new SqlCommand();
                xlCMD.Connection = DatabaseStatic.conn;
                xlCMD.CommandType = CommandType.StoredProcedure;
                xlCMD.CommandTimeout = 30000;
                xlCMD.CommandText = xlSPName;
                SqlParameter xlYourPara = null;
                for (int i = 0; i < xlListPara.Length; i++)
                {
                    xlYourPara = new SqlParameter(xlListPara[i], xlListValu[i]);
                    xlCMD.Parameters.Add(xlYourPara);
                }
                SqlDataAdapter xlYourDataAdapter = new SqlDataAdapter(xlCMD);
                xlYourDataAdapter.Fill(xlDataTable);
            }
            catch (Exception a)
            {
                xlDataTable = null;
            }
            return xlDataTable;
        }

        /// <summary>
        /// Hàm thực thi câu Insert
        /// </summary>
        /// <param name="xlSPName">Tên Proc Insert</param>
        /// <param name="xlListPara">Danh sách tên biến dưới sql</param>
        /// <param name="xlListValu">Danh sách các giá trị biến sql</param>
        /// <returns>Trả zề cỉu True False || True là thực thi Oki, False là éo có thực thi đc</returns>
        public bool Insert(string xlSPName, string[] xlListPara, object[] xlListValu)
        {
            bool xlOki = false;
            SqlCommand xlCMD = new SqlCommand();
            xlCMD.Connection = DatabaseStatic.conn;
            xlCMD.CommandText = xlSPName;
            xlCMD.Transaction = DatabaseStatic.sqltrans;
            xlCMD.CommandType = CommandType.StoredProcedure;
            try
            {
                SqlParameter xlYourPara = null;
                for (int i = 0; i < xlListPara.Length; i++)
                {

                    xlYourPara = new SqlParameter(xlListPara[i], xlListValu[i]);
                    xlCMD.Parameters.Add(xlYourPara);
                }
                xlCMD.ExecuteNonQuery();
                xlOki = true;
            }
            catch (Exception a)
            {
                xlOki = false;
            }
            return xlOki;
        }


        public DataTable InsertReturnObj(string xlSPName, string[] xlListPara, object[] xlListValu)
        {
            DataTable xlDataTable = new DataTable();
            SqlCommand xlCMD = new SqlCommand();
            xlCMD.Connection = DatabaseStatic.conn;
            xlCMD.CommandText = xlSPName;
            xlCMD.Transaction = DatabaseStatic.sqltrans;
            xlCMD.CommandType = CommandType.StoredProcedure;
            try
            {
                SqlParameter xlYourPara = null;
                for (int i = 0; i < xlListPara.Length; i++)
                {

                    xlYourPara = new SqlParameter(xlListPara[i], xlListValu[i]);
                    xlCMD.Parameters.Add(xlYourPara);
                }
                SqlDataAdapter xlYourDataAdapter = new SqlDataAdapter(xlCMD);
                xlYourDataAdapter.Fill(xlDataTable);
            }
            catch (Exception a)
            {
                xlDataTable = null;
            }
            return xlDataTable;
        }

        /// <summary>
        /// Hàm thực thi câu Update || Y chan Insert nhưng rãnh rổi zin nông nỏi
        /// </summary>
        /// <param name="xlSPName">Tên Proc Update</param>
        /// <param name="xlListPara">Danh sách tên biến dưới sql</param>
        /// <param name="xlListValu">Danh sách các giá trị biến sql</param>
        /// <returns>Trả zề cỉu True False || True là thực thi Oki, False là éo có thực thi đc</returns>
        public bool Update(string xlSPName, string[] xlListPara, object[] xlListValu)
        {
            bool xlOki = false;
            SqlCommand xlCMD = DatabaseStatic.conn.CreateCommand();
            xlCMD.CommandText = xlSPName;
            xlCMD.CommandType = CommandType.StoredProcedure;
            xlCMD.Transaction = DatabaseStatic.sqltrans;
            try
            {
                SqlParameter xlYourPara = null;
                for (int i = 0; i < xlListPara.Length; i++)
                {
                    xlYourPara = new SqlParameter(xlListPara[i], xlListValu[i]);
                    xlCMD.Parameters.Add(xlYourPara);
                }
                xlCMD.ExecuteNonQuery();
                xlOki = true;
            }
            catch (Exception a)
            {
                xlOki = false;
            }
            return xlOki;
        }

        /// <summary>
        /// Hàm thực thi câu Delete || Y chan Insert nhưng rãnh rổi zin nông nỏi
        /// </summary>
        /// <param name="xlSPName">Tên Proc Update</param>
        /// <param name="xlListPara">Danh sách tên biến dưới sql</param>
        /// <param name="xlListValu">Danh sách các giá trị biến sql</param>
        /// <returns>Trả zề cỉu True False || True là thực thi Oki, False là éo có thực thi đc</returns>
        public bool Delete(string xlSPName, string[] xlListPara, object[] xlListValu)
        {
            bool xlOki = false;
            SqlCommand xlCMD = DatabaseStatic.conn.CreateCommand();
            xlCMD.CommandText = xlSPName;
            xlCMD.CommandType = CommandType.StoredProcedure;
            xlCMD.Transaction = DatabaseStatic.sqltrans;
            try
            {
                SqlParameter xlYourPara = null;
                for (int i = 0; i < xlListPara.Length; i++)
                {
                    xlYourPara = new SqlParameter(xlListPara[i], xlListValu[i]);
                    xlCMD.Parameters.Add(xlYourPara);
                }
                xlCMD.ExecuteNonQuery();
                xlOki = true;
            }
            catch (Exception a)
            {
                xlOki = false;
            }
            return xlOki;
        }
    }
}
